/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Precipicio;

/**
 *
 * @author jefferpc
 */
public class Nodo {
    private String nombre;
    private double utilidad;
    private double profundidad;
    private Nodo padre;
    private  int estadoJuegoMAX,estadoJuegoMIN;
    private String decision;
    private boolean cedeTurnoMIN;
    private boolean cedeTurnoMax;
    public Nodo(String nombre,Nodo padre,double profundidad)
    {
        cedeTurnoMIN=false;
        cedeTurnoMax=false;
        this.padre=padre;
        this.nombre=nombre;
        decision="nada";
        utilidad=0;
        setProfundidad(profundidad);
        
        if(nombre.equals("MAX"))
        {
            utilidad=Double.NEGATIVE_INFINITY;
        }
        if(nombre.equals("MIN"))
        {
            utilidad=Double.POSITIVE_INFINITY;
        }
    }
    public  void reportarUtilidadPadre()
    {
       if(padre!=null){
        
        padre.setUtilidad(utilidad,nombre);
       //System.out.println("$:"+estadoJuego+"=>"+padre.getEstadoJuego());
       //System.out.println(estadoJuego+" "+utilidad);
        }
    }
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Nodo getPadre() {
        return padre;
    }

    public void setPadre(Nodo padre) {
        this.padre = padre;
    }

    public double getProfundidad() {
        return profundidad;
    }

    public void setProfundidad(double profundidad) {
        this.profundidad = profundidad;
    }

    public double getUtilidad() {
        return utilidad;
    }

    public int getEstadoJuegoMIN() {
        return estadoJuegoMIN;
    }
    public int getEstadoJuegoMAX() {
        return estadoJuegoMAX;
    }
    public void setEstadoJuego(int estadoJuegoMAX,int estadoJuegoMIN) {
        this.estadoJuegoMAX = estadoJuegoMAX;
        this.estadoJuegoMIN=estadoJuegoMIN;
    }

    public void setUtilidad(double utilidad,String decision) {

        //se puso <= para q coja el camino mas largo cuando son iguales.
        if(nombre.equals("MAX") && this.utilidad<=utilidad)
        {

            this.decision=decision;
            this.utilidad=utilidad;

        }
        if(nombre.equals("MIN")&&this.utilidad>utilidad)
        {

            this.decision=decision;
            this.utilidad=utilidad;

        }
        if(nombre.equals("DADO"))
        {
            this.utilidad+=(utilidad/3);
           // System.out.println("DADO"+this.utilidad+" "+utilidad);
        }
    }

    public String getDecision() {
        return decision;
    }

    public void setDecision(String decision) {
        this.decision = decision;
    }

    public boolean  getCedeTurnoMin() {
        return cedeTurnoMIN;
    }

    public void setCedeTurnoMin(boolean  cedeTurno) {
        this.cedeTurnoMIN = cedeTurno;
    }

    public boolean getCedeTurnoMax() {
        return cedeTurnoMax;
    }

    public void setCedeTurnoMax(boolean cedeTurnoMax) {
        this.cedeTurnoMax = cedeTurnoMax;
    }
    

}
